/**
 * 安全的JSON解析工具
 * 用于解析后端返回的嵌套JSON字符串数据
 */

/**
 * 安全解析JSON字符串
 * @param {string} jsonString - 需要解析的JSON字符串
 * @param {*} defaultValue - 解析失败时的默认值
 * @returns {*} 解析后的对象或默认值
 */
export function safeJsonParse(jsonString, defaultValue = null) {
  if (!jsonString || typeof jsonString !== 'string') {
    return defaultValue
  }

  try {
    // 先尝试直接解析
    return JSON.parse(jsonString)
  } catch (error) {
    console.warn('JSON解析失败，尝试修复格式:', error.message)
    
    try {
      // 尝试修复常见的JSON格式问题
      let fixedJson = jsonString
      
      // 修复单引号问题
      fixedJson = fixedJson.replace(/'/g, '"')
      
      // 修复未加引号的属性名
      fixedJson = fixedJson.replace(/(\w+):/g, '"$1":')
      
      // 修复尾随逗号
      fixedJson = fixedJson.replace(/,(\s*[}\]])/g, '$1')
      
      return JSON.parse(fixedJson)
    } catch (secondError) {
      console.error('JSON修复后仍然解析失败:', secondError.message)
      console.error('原始字符串:', jsonString)
      return defaultValue
    }
  }
}

/**
 * 解析活动页面数据
 * @param {Object} data - 包含templateJson和component字段的数据对象
 * @returns {Object} 解析后的数据对象
 */
export function parseActivityData(data) {
  if (!data || typeof data !== 'object') {
    return data
  }

  const result = { ...data }

  // 解析templateJson
  if (data.templateJson) {
    result.templateJson = safeJsonParse(data.templateJson, {})
  }

  // 解析component
  if (data.component) {
    result.component = safeJsonParse(data.component, [])
  }

  return result
}

/**
 * 批量解析活动列表数据
 * @param {Array} list - 活动列表数据
 * @returns {Array} 解析后的活动列表
 */
export function parseActivityList(list) {
  if (!Array.isArray(list)) {
    return []
  }

  return list.map(item => parseActivityData(item))
}

/**
 * 验证JSON字符串格式
 * @param {string} jsonString - 需要验证的JSON字符串
 * @returns {boolean} 是否为有效的JSON格式
 */
export function isValidJson(jsonString) {
  if (!jsonString || typeof jsonString !== 'string') {
    return false
  }

  try {
    JSON.parse(jsonString)
    return true
  } catch (error) {
    return false
  }
}

/**
 * 格式化JSON字符串（用于调试）
 * @param {string} jsonString - 需要格式化的JSON字符串
 * @returns {string} 格式化后的JSON字符串
 */
export function formatJsonString(jsonString) {
  const parsed = safeJsonParse(jsonString)
  if (parsed !== null) {
    return JSON.stringify(parsed, null, 2)
  }
  return jsonString
}
